<?php
/**
 * HITI AdminCP HTML Functions Helpers
 *
 * @package     HITI AdminCP
 * @since       Monday, October 21, 2013, 6:00 PM
 * @final    
 * @category    Helpers
 * @author      PHUOCNGUYEN - HITI Dev Team
 * @copyright   Copyright (c) 2013, HITI Corp
 */

// ------------------------------------------------------------------------

/**
 * Hàm del_restore_link
 *
 * Tạo liên kết xóa / khôi phục / xóa vĩnh viễn một mục
 *
 * @access  public
 * @param   int id : id mục cần xóa
 * @param   [, int deleted = 0] : nếu mục đang bị xóa vào thùng rác (deleted = 1) sẽ xuất hiện liên kết xóa vĩnh viễn
 * @param   [, boolean no_remove] : không ẩn mục khi xóa
 * @param   [, boolean remove_link] : cho hiển thị link xóa vĩnh viễn không phụ thuộc vào chế độ xem đã xóa
 * @param   [, table] : bảng dữ liệu cần xóa
 * @return  icon bin/refresh [remove]
 */
if ( ! function_exists('del_restore_link'))
{
    function del_restore_link($id, $deleted = 0, $no_remove = false, $remove_link = false, $table = '')
    {
        $html = '<a href="javascript:;" title="'.($deleted ? 'Khôi phục' : 'Xóa').'" class="delRestoreLink" data-id="'.$id.'" data-table="'.$table.'"><div class="icon glyphicons '.($deleted ? 'refresh' : 'bin').($no_remove ? ' no-remove' : '').'"></div></a>';
        if ($deleted || $remove_link == true) $html .= ' '.remove_link($id, $table);
        return $html;
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm remove_link
 *
 * Tạo liên kết xóa vĩnh viễn một mục
 *
 * @access  public
 * @param   int id : id mục cần xóa
 * @param   [, table] : bảng dữ liệu cần xóa
 * @return  icon remove
 */
if ( ! function_exists('remove_link'))
{
    function remove_link($id, $table = '')
    {
    	return '<a href="javascript:;" title="Xóa vĩnh viễn" class="removeLink" data-id="'.$id.'" data-table="'.$table.'"><div class="icon glyphicons remove"></div></a>';
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm edit_alink
 *
 * Tạo liên kết chỉnh sửa một mục
 *
 * @access  public
 * @param   [id = ''] : id mục chỉnh sửa
 * @param   [, string href = ''] : liên kết đến trang chỉnh sửa
 * @param   [, string class = ''] : thuộc tính class của link
 * @param   [, string style = ''] : style bổ sung của link
 * @return  icon edit
 */
if ( ! function_exists('edit_alink'))
{
    function edit_alink($id = '', $href = '', $class = '', $style = '')
    {
        if ($href == '') $href = 'javascript:;';
        return '<a href="'.$href.'" title="Sửa"'.($class ? ' class="'.$class.'"' : '').''.($id ? ' data-id="'.$id.'"' : '').'><div class="icon glyphicons edit"'.($style ? ' style="'.$style.'"' : '').'></div></a>';
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm no_data_mes
 *
 * Hiển thị thông báo không có dữ liệu khi xem danh sách dữ liệu một module
 *
 * @access  public
 * @param   [int colspan = ''] : giá trị colspan cho tag td
 * @return  html text
 */
if ( ! function_exists('no_data_mes'))
{
    function no_data_mes($colspan = '')
    {
        return '<tr><td class="fr center"'.($colspan ? ' colspan="'.$colspan.'"' : '').' style="height:100px; font-size:16px"><span class="small" style="color: red;"><strong>Không có dữ liệu!</strong></span></td></tr>';
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm change_status
 *
 * Tạo liên kết ajax đổi trạng thái một field dữ liệu
 *
 * @access  public
 * @param   int id : id mục cần update
 * @param   int value : giá trị update (1/0)
 * @param   string field : trường cần update
 * @param   [, string name = ''] : trên trường update
 * @param   [, boolean one_sel = false] : chỉ 1 mục được chọn trong danh sách
 * @param   [, string style = ''] : style bổ sung cho icon
 * @param   [, boolean disabled = false] : them class disabled
 * @return  <div data-id={id} data-field={field} data-name={name} class="changeStatus icon-{check/unchecked} {one_select}" {style}></div>
 */
if ( ! function_exists('change_status'))
{
    function change_status($id, $value, $field, $name = '', $one_sel = false, $style = '', $disabled = false)
    {
    	return '<div data-id="'.$id.'" data-field="'.$field.'" data-name="'.$name.'" class="changeStatus'.($disabled ? ' disabled' : '').' icon glyphicons '.($value ? 'check' : 'unchecked').($one_sel ? ' one_select' : '').'"'.($style ? ' style="'.$style.'"' : '').'></div>';
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm del_image
 *
 * Tạo liên kết ajax xóa ảnh
 *
 * @access  public
 * @param   string field : field ảnh cần xóa
 * @param   [, id field] : id mục cần cóa ảnh
 * @param   [, string style = ''] : style bổ sung cho icon
 * @return  <div class="icon-bin delImageIcon" data-field={field} {style}></div>
 */
if ( ! function_exists('del_image'))
{
    function del_image($field, $id = '', $style = '')
    {
    	echo '<div class="icon glyphicons remove delImageIcon" title="Xóa ảnh" data-field="'.$field.'"'.($id ? ' data-id="'.$id.'"' : '').''.($style ? ' style="'.$style.'"' : '').'></div>';
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm toggle_input
 *
 * Tạo liên kết ajax đảo trạng thái (1/0) một cấu hình
 *
 * @access  public
 * @param   int id : id cấu hình
 * @param   boolean checked : giá trị 1/0 hiện tại của file cấu hình
 * @param   string field : field cấu hình
 * @param   [, boolean disabled = false] : them class disabled
 * @return  <input checkbox class=toggleInput {checked} data-id={id} data-field={field} /><label></label>
 */
if ( ! function_exists('toggle_input'))
{
    function toggle_input($id, $checked, $field, $disabled = false)
    {
        return '<input type="checkbox" class="toggleInput'.($disabled ? ' disabled' : '').'"'.($checked ? ' checked="checked"' : '').' id="toggleInput'.$id.'" data-id="'.$id.'" data-field="'.$field.'" /><label for="toggleInput'.$id.'"></label>';
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm stt
 *
 * Hiển thị số thứ tự một mục trong danh sách dữ liệu module
 *
 * @access  public
 * @param   int id : id mục
 * @param   string stt : Số thứ tự
 * @return  <span class=STT_{id}>{stt}</span><input hidden value={stt} id=Old_{id} />
 */
if ( ! function_exists('stt'))
{
    function stt($id, $stt)
    {
        return '<span class="stt STT_'.$id.'">'.$stt.'</span><input type="hidden" value="'.$stt.'" id="Old_'.$id.'" />';
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm sel_item
 *
 * Tạo checkbox chọn cho một mục
 *
 * @access  public
 * @param   int id : id mục
 * @param   [, boolean disable = false] : Vô hiệu hóa
 * @return  <input checkbox class=cb-element id=sel_item{id} value={id} />
 */
if ( ! function_exists('sel_item'))
{
    function sel_item($id, $disable = false, $checked = false)
    {
        return '<input type="checkbox" class="cb-element" name="element[]" id="sel_item'.$id.'" value="'.$id.'"'.($checked ? ' checked="checked"' : '').''.($disable ? ' disabled="disabled"' : '').' />';
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm show_flash
 *
 * Hiển thị file flash
 *
 * @access  public
 * @param   string file flash
 * @param   int width (px)
 * @param   int height (px)
 * @return  flash object
 */
if ( ! function_exists('show_flash'))
{
    function show_flash($file_path, $w, $h)
    {
    	return '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="'.$w.'px" height="'.$h.'px" align="middle">
    			<param name="movie" value="'.$file_path.'" />
    			<param name="wmode" value="transparent" />
    			<embed src="'.$file_path.'" quality="best" wmode="transparent" width="'.$w.'px" height="'.$h.'px" align="middle" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
    		</object>';
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm show_img
 *
 * Hiển thị file ảnh
 *
 * @access  public
 * @param   string file image
 * @param   [, string class = '']
 * @param   [, string style = '']
 * @return  <img src={file image} {class} {style} />
 */
if ( ! function_exists('show_img'))
{
    function show_img($file_path, $class = '', $style = '')
    {
    	if (goodfile($file_path)) return '<img src="'.$file_path.'"'.($class ? ' class="'.$class.'"' : '').($style ? ' style="'.$style.'"' : '').' />';
        else return 'No file!';
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm error_div
 *
 * Tạo div thông báo lỗi
 *
 * @access  public
 * @param   string field : class div lỗi cũng là id input được kiểm tra lỗi nhập
 * @param   string message : Thông báo lỗi sẽ hiện lên
 * @param   [, string style = '']
 * @return  <div class="errordiv {field}" {style}><div class="arrow"></div>{message}</div>
 */
if ( ! function_exists('error_div'))
{
    function error_div($field, $message, $style = '')
    {
    	return '<div class="errordiv '.$field.'"'.($style ? ' style="'.$style.'"' : '').'><div class="arrow"></div>'.$message.'</div>';
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm module_open
 *
 * Tạo các thẻ mở đầu cho một module
 *
 * @access  public
 * @return  html text
 */
if ( ! function_exists('module_open'))
{
    function module_open()
    {
        return '<table class="mainTable noPrint" id="mainTable-'.$GLOBALS['var']['act'].'" border="0">';
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm module_close
 *
 * Tạo thẻ đóng lại một module
 *
 * @access  public
 * @return  </table>
 */
if ( ! function_exists('module_close'))
{
    function module_close()
    {
        $table_name = $GLOBALS['var']['act'];
        $table_title = get_data('modules', "file = '$table_name'", 'name_en');
    	return '</table><div id="moduleInfo" data-table="'.$table_name.'" data-type="'.$table_title.'"></div>';
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm admin_menu
 *
 * Tạo menu quản lý
 *
 * @access  public
 * @return  html text
 */
if ( ! function_exists('admin_menu'))
{
    function admin_menu()
    {
        global $modules_groups;
        if (!$modules_groups)
        {
            return false;
        }
        $ci =& get_instance();
        $ci->db->query("SET NAMES 'LATIN1'");
        $group = get_data('modules', "file = '{$GLOBALS['var']['act']}'", 'nhom');
        $html_menu = '';
        if (!$GLOBALS['user']['user_rights'])
        {
            return false;
        }
        $user_rights = json_decode($GLOBALS['user']['user_rights']);
        $rights = array();
        foreach ($user_rights as $key => $value)
        {
            if (@array_key_exists('view', $value)) $rights[] = $key;
        }
        for ($i=0; $i< count($modules_groups); $i++)
        {
            $ci->db->where('nhom', $i);
            $ci->db->where('active', 1);
            $ci->db->where('deleted', 0);
            $ci->db->where_in('file', $rights);
            $ci->db->select('id');
            $query = $ci->db->get('modules');
            if ($query->num_rows() > 0)
            {
                $html = '';
                $n = 0;
                $ci->db->select('file, image, name_vn');
                $ci->db->where('nhom', $i);
                $ci->db->where('active', 1);
                $ci->db->where('deleted', 0);
                $ci->db->where('menu', 1);
                $ci->db->order_by('sort_order DESC');
                $query = $ci->db->get('modules');
                $html .= '<li'.($group == $i ? ' class="active"' : '').'>';
                $html .= '<a href="#" class="dropdown-toggle"><i class="'.$modules_groups[$i]['icon'].'"></i><span>'.$modules_groups[$i]['name'].'</span><b class="arrow fa fa-angle-'.($group == $i ? 'down' : 'right').'"></b></a>';
                $html .= '<ul class="submenu">';
                foreach ($query->result_array() as $data_cats)
                {
                    if (check_rights($data_cats['file']))
                    {
                        $html .= '<li'.($GLOBALS['var']['act'] == $data_cats['file'] ? ' class="active"' : '').'><a class="loading" href="'.site_url($data_cats['file']).'">'.$data_cats['name_vn'].'</a></li>';
                        $n++;
                    }
                }
                $html .= '</ul>';
                $html .= '</li>';
                if (!$n)
                {
                    $html = '';
                }
                $html_menu .= $html;
            }
        }
        return $html_menu;
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm page_list
 *
 * Tạo phân trang cho danh sách dữ liệu bảng
 *
 * @access  public
 * @param   int start : Vị trí bắt đầu lấy dữ liệu từ bảng
 * @param   int count : Số hàng dữ liệu sẽ lấy
 * @param   int total : Tổng số hàng trong bảng
 * @param   [, int range = 0] : Giới hạn số trang trong danh sách trang
 * @param   [, string link = ''] : Liên kết chuyển trang
 * @return  html text
 */
if ( ! function_exists('page_list'))
{
    function page_list($total, $uri = '', $range = 4, $ajax = false)
    {
        $url = site_url($GLOBALS['var']['act'].($GLOBALS['var']['do'] ? '/'.$GLOBALS['var']['do'] : '').($GLOBALS['var']['id'] ? '/'.$GLOBALS['var']['id'] : ''));
        $start = '';
        $count = '';
        $href = 'javascript:;';
        if (is_array($uri))
        {
            $start = $uri['rowstart'];
            $count = $uri['limit'];
            if ($start == '') $start = 0;
            unset($uri['rowstart'], $uri['limit']);
            $uri_str = url_uri($uri);
            $link = $url.$uri_str.($uri_str ? '&' : '?');
        }
        else
        {
            if ($uri == '') $link = $url.'?';
            else $link = $url.$uri.'&';
        }
        if ($start == '') $start = 0;
        if ($count == '') $count = 50;
        $pg_cnt = ceil($total / $count);
        if ($pg_cnt <= 1) return '';
        $html = '';
        $idx_back = $start - $count;
        $idx_next = $start + $count;
        $cur_page = ceil(($start + 1) / $count);
        if ($idx_back >= 0)
        {
            if($cur_page > ($range + 1))
            {
                if (!$ajax) $href = $link.'rowstart=0';
                $html .= '&nbsp;<a class="loading" href="'.$href.'" data-rowstart="0" style="color: #fff;"><strong>1</strong></a>&nbsp;...';
            }
        }
        $idx_fst = max($cur_page - $range, 1);
        $idx_lst = min($cur_page + $range, $pg_cnt);
        if ($range == 0)
        {
            $idx_fst = 1;
            $idx_lst = $pg_cnt;
        }
        for ($i = $idx_fst; $i <= $idx_lst; $i++)
        {
            $offset_page = ($i - 1) * $count;
            if (!$ajax) $href = $link.'rowstart='.$offset_page;
            if ($i == $cur_page) $html .= '&nbsp;<span style="color: #afafaf;"><strong> '.$i.'</strong></span>';
            else $html .= '&nbsp;<a class="loading" href="'.$href.'" data-rowstart="'.$offset_page.'" style="color: #fff; font-weight: bold;"> '.$i.'</a>';
        }
        if ($idx_next < $total)
        {
            if ($cur_page < ($pg_cnt - $range))
            {
                $offset_page = (($pg_cnt - 1) * $count);
                if (!$ajax) $href = $link.'rowstart='.$offset_page;
    		   	$html .= '&nbsp;...&nbsp;<a class="loading" href="'.$href.'" data-rowstart="'.$offset_page.'" style="color: #fff;"> '.$pg_cnt.'</a>';
            }
        }
    	$foward = $start + $count;
    	$backward = $start - $count;
    	if ($cur_page > 1)
        {
            if (!$ajax) $href = $link.'rowstart='.$backward;
            $html = '<a class="loading" href="'.$href.'" data-rowstart="'.$backward.'"><b class="icon glyphicons white chevron-left"></b></a>'.$html;
    	}
        if ($cur_page < $pg_cnt)
        {
            if (!$ajax) $href = $link.'rowstart='.$foward;
            $html .= '&nbsp;<a class="loading" href="'.$href.'" data-rowstart="'.$foward.'"><b class="icon glyphicons white chevron-right"></b></a>';    
        }
        return '<div class="page_list">Trang '.$cur_page.'/'.$pg_cnt.' ('.$total.'): '.$html.'</div>';
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm create_sort
 *
 * Tạo liên kết sắp xếp cho một trường dữ liệu
 *
 * @access  public
 * @param   string field : Trường cần sắp xếp
 * @return  html text
 */
if ( ! function_exists('create_sort'))
{
    function create_sort($field)
    {
        $ci =& get_instance();
        $act = $ci->uri->segment(1);
        $orderby = $ci->input->get('orderby', true);
        $ordermode = $ci->input->get('ordermode', true);
        if ($ordermode == '') $ordermode = 'desc';
        if ($field == $orderby)
        {
            if($ordermode == 'desc') $ordermode = 'asc';
            else $ordermode = 'desc';
        }
        $uri = array(
            'deleted' => $ci->input->get('deleted', true),
            'q' => $ci->input->get('q', true),
            'cat' => $ci->input->get('cat', true),
            'from' => $ci->input->get('from', true),
            'to' => $ci->input->get('to', true),
            'orderby' => $field,
            'ordermode' => $ordermode
        );
        return '<a href="'.site_url($act).url_uri($uri).'" title="Sắp xếp">
        <div class="icon12 glyphicons '.($orderby == $field ? (strtolower($ordermode) == 'desc' ? 'sort-by-attributes' : 'sort-by-attributes-alt') : 'sorting').'" style="margin-top:3px; float:right; margin-left:3px;"></div></a>';
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm cat_tree
 *
 * Tạo cây thư mục danh mục
 *
 * @access  public
 * @param   [array object cat] : Mảng danh mục
 * @param   [, int parent] : ID danh mục chính
 * @param   [, array selected] : Mảng chọn
 * @param   [, string type = checkbox] : Kiểu input
 * @param   [, boolean no_parent = true] : Hiển thị Radio input không thuộc nhóm
 * @return  html tree list
 */
if ( ! function_exists('cat_tree'))
{
    function cat_tree($cats, $parent = 0, $checked = '', $type = 'checkbox', $no_parent = true, $field_name = 'cat')
    {
        if (!is_array($cats))
        {
            return false;
        }
        if (empty($htmlcat))
        {
            if ($type == 'radio' && $no_parent)
            {
                $check = $checked == 0 || $checked == '';
                $no_parent = '<li>';
                $no_parent .= '<label>';
                $no_parent .= '<input type="radio" data-id="" name="'.$field_name.'" value=""'.($check ? ' checked="checked"' : '').'>';
                $no_parent .= '<span class="file">Không chọn ...</span>';
                $no_parent .= '</label>';
                $htmlcat = $no_parent;
            }
            else
            {
                $htmlcat = '';
            }
        }
        foreach ($cats as $key => $cat)
        {
            if ($cat['parent'] == $parent)
            {
                $check = (is_array($checked) && in_array($cat['id'], $checked)) || $checked == $cat['id'];
                $subcat = '';
                if ($cat['id'])
                {
                    $subcat = cat_tree($cats, $cat['id'], $checked, $type, false, $field_name);
                }
                $htmlcat .= '<li'.($subcat ? ' class="collapsable"' : '').'>';
                if ($subcat) $htmlcat .= '<div class="hitarea collapsable-hitarea"></div>';
                $htmlcat .= '<label>';
                $htmlcat .= '<input type="'.$type.'" data-id="'.$cat['id'].'" name="'.$field_name.''.($type == 'checkbox' ? '[]' : '').'" value="'.$cat['id'].'"'.($check ? ' checked="checked"' : '').'>';
                $htmlcat .= '<span class="'.($parent == 0 ? 'folder' : 'file').'">'.$cat['name_vn'].(!empty($cat['product']) ? ' ('.$cat['product'].')' : '').'</span>';
                $htmlcat .= '</label>';
                if ($subcat)
                {
                    $htmlcat .= '<ul>';
                    $htmlcat .= $subcat;
                    $htmlcat .= '</ul>';
                }
                $htmlcat .= '</li>';
                unset($cats[$key]);
            }
        }
        return $htmlcat;
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm category_nestable
 *
 * Tạo cây thư mục danh mục có thể sắp xếp
 *
 * @access  public
 * @param   [array object cat] : Mảng danh mục
 * @param   [, int parent] : ID danh mục chính
 * @param   [, string field] : Tên field số mục con từ lệnh query sql
 * @param   [, string type] : Tên mục con
 * @param   [, string uri_str] : Chuỗi tham số url
 * @return  html tree list
 */
if ( ! function_exists('category_nestable'))
{
    function category_nestable($cats, $parent = 0, $field = 'product', $type = 'sản phẩm', $uri_str = '')
    {
        if (!is_array($cats))
        {
            return false;
        }
        if (empty($htmlcat))
        {
            $htmlcat = '';
        }
        foreach ($cats as $key => $cat)
        {
            if ($cat['parent'] == $parent)
            {
                $htmlcat .= '<li class="dd-item dd3-item" data-id="'.$cat['id'].'">';
                $htmlcat .= '<div class="dd-handle dd3-handle icon glyphicons list"></div>';
                $htmlcat .= '<div class="dd3-content"><span data-name="'.$cat['id'].'">'.$cat['name_vn'].'</span><div class="note">('.$cat[$field].' '.$type.')</div></div>';
                $htmlcat .= '<div class="dd-status">'.change_status($cat['id'], $cat['active'], 'active', 'Kích hoạt', '', '', !$GLOBALS['per']['edit']).'</div>';
                $htmlcat .= '<div class="dd-cmd">';
                if ($GLOBALS['per']['edit']) $htmlcat .= edit_alink('', site_url($GLOBALS['var']['act'].'/update/'.$cat['id'].$uri_str));
                if ($GLOBALS['per']['del']) $htmlcat .= del_restore_link($cat['id'], $cat['deleted'], true, true);
                $htmlcat .= '</div>';
                if ($cat['chirld'])
                {
                    $htmlcat .= '<ol class="dd-list">';
                    $htmlcat .= category_nestable($cats, $cat['id'], $field, $type, $uri_str);
                    $htmlcat .= '</ol>';
                }
                $htmlcat .= '</li>';
                unset($cats[$key]);
            }
        }
        return $htmlcat;
    }
}

/* End of file html_helper.php */
/* Location: ./application/helpers/html_helper.php */